#include <GerenciadorEntrada.h>

namespace td{
namespace io{

GerenciadorEntrada::GerenciadorEntrada(){

	mouse = new Mouse();
	teclado = new Teclado();
}

GerenciadorEntrada::~GerenciadorEntrada(void){
}

bool GerenciadorEntrada::OnEvent(const irr::SEvent &event){
		
	// tratamento de mouse
	if (event.EventType == EET_MOUSE_INPUT_EVENT){
		
		switch(event.MouseInput.Event){
			
			case EMIE_LMOUSE_PRESSED_DOWN:
				mouse->setEstadoBotaoEsquerdo(true);
				break;

			case EMIE_LMOUSE_LEFT_UP:
				mouse->setEstadoBotaoEsquerdo(false);
				break;

			case EMIE_RMOUSE_PRESSED_DOWN:
				mouse->setEstadoBotaoDireito(true);
				break;

			case EMIE_RMOUSE_LEFT_UP:
				mouse->setEstadoBotaoDireito(false);
				break;

			case EMIE_MOUSE_MOVED:
				mouse->setPosicaoXY(event.MouseInput.X, event.MouseInput.Y);
				break;
			case EMIE_MOUSE_WHEEL:
				mouse->setScroll(event.MouseInput.Wheel);				
				break;

			default:
				
				break;
		}
	}

	// tratamento de teclado
	if (event.EventType == irr::EET_KEY_INPUT_EVENT){
	    // marca da tecla (obtida no evento) como pressionada
		teclado->setTeclaPressionada(event.KeyInput.Key,event.KeyInput.PressedDown);
	}

	if (event.EventType == irr::EET_GUI_EVENT){

		if(event.GUIEvent.EventType == EGET_BUTTON_CLICKED){
			
			GUIEvtCode = event.GUIEvent.Caller->getID();
			return true;
		}
		else{
			GUIEvtCode = -1;
		}

	}

	return false;
}

bool GerenciadorEntrada::IsKeyDown(CODIGO_TECLA codigoTecla) const{

	return teclado->temTeclaPressionada(codigoTecla);
} 

Teclado* GerenciadorEntrada::getTeclado(void){
	return teclado;
}

Mouse* GerenciadorEntrada::getMouse(void){
	return mouse;
}

bool GerenciadorEntrada::tratarGUI(int idComponente){

	if(GUIEvtCode == idComponente){
		GUIEvtCode = -1;
		return true;
	}
	return false;
} 
} //end namespace io
} //end namespace td